package br.fafica.pi1.rightcode.Fachada;

import java.sql.SQLException;
import java.util.ArrayList;

import br.fafica.pi1.rightcode.Aluno.Aluno;
import br.fafica.pi1.rightcode.Aluno.RepositorioAlunoArrayList;
import br.fafica.pi1.rightcode.Disciplina.Disciplina;
import br.fafica.pi1.rightcode.Disciplina.RepositorioDisciplinaArrayList;
import br.fafica.pi1.rightcode.Exception.AlunoNaoEncontradoException;
import br.fafica.pi1.rightcode.Exception.AlunoTurmaInvalidaException;
import br.fafica.pi1.rightcode.Exception.CodigoInvalidoException;
import br.fafica.pi1.rightcode.Exception.DisciplinaNaoEncontradaException;
import br.fafica.pi1.rightcode.Exception.FiltroNaoEncontradoException;
import br.fafica.pi1.rightcode.Exception.DisciplinaListaVaziaException;
import br.fafica.pi1.rightcode.Exception.NomeInvalidoException;
import br.fafica.pi1.rightcode.Exception.UsuarioNaoEncontradoException;
import br.fafica.pi1.rightcode.Exception.AlunolistaVaziaException;
import br.fafica.pi1.rightcode.Exception.FiltrolistaVaziaException;
import br.fafica.pi1.rightcode.Exception.UsuariolistaVaziaException;
import br.fafica.pi1.rightcode.Factory.DataSourceType;
import br.fafica.pi1.rightcode.Filtro.Filtro;
import br.fafica.pi1.rightcode.Filtro.RepositorioFiltroArrayList;
import br.fafica.pi1.rightcode.Usuario.RepositorioUsuarioArrayList;
import br.fafica.pi1.rightcode.Usuario.Usuario;

public interface IFachada {
	
	public void selectDataSource(DataSourceType type);
	public void installDataSource(boolean samples) throws SQLException;
	public void TesteAluno() throws SQLException;
	public void InstalarAluno(boolean samples) throws SQLException;
	public void AdicionarAluno(Aluno aluno) throws SQLException, CodigoInvalidoException, NomeInvalidoException, AlunoTurmaInvalidaException;
	public ArrayList<Aluno> ListaAluno() throws AlunolistaVaziaException, SQLException;
	public void RemoverAluno(Aluno aluno) throws SQLException, AlunoNaoEncontradoException, CodigoInvalidoException;
	public Aluno BuscarAluno(int codigo) throws AlunoNaoEncontradoException, SQLException, CodigoInvalidoException;
	public void EditarAluno(Aluno aluno) throws AlunoNaoEncontradoException, SQLException, CodigoInvalidoException;
	public void TesteFiltro() throws SQLException;
	public void InstalarFiltro(boolean samples) throws SQLException;
	public void AdicionarFiltro(Filtro filtro) throws SQLException, CodigoInvalidoException, NomeInvalidoException;
	public ArrayList<Filtro> ListaFiltro() throws SQLException, FiltrolistaVaziaException;
	public void RemoverFiltro(Filtro filtro) throws SQLException, FiltroNaoEncontradoException, CodigoInvalidoException;
	public Filtro BuscarFiltro(int codigo) throws SQLException, FiltroNaoEncontradoException, CodigoInvalidoException;
	public void EditarFiltro(Filtro filtro)throws FiltroNaoEncontradoException, SQLException, NomeInvalidoException, CodigoInvalidoException;
	public void TesteUsuario() throws SQLException;
	public void InstalarUsuario(boolean samples) throws SQLException;
	public void AdicionarUsuario(Usuario usuario) throws SQLException, CodigoInvalidoException, NomeInvalidoException;
	public ArrayList<Usuario> ListaUsuario() throws SQLException, UsuariolistaVaziaException;
	public void RemoverUsuario(Usuario usuario) throws SQLException, UsuarioNaoEncontradoException, CodigoInvalidoException;
	public Usuario BuscarUsuario(int codigo) throws SQLException, UsuarioNaoEncontradoException, CodigoInvalidoException;
	public void EditarUsuario(Usuario usuario) throws UsuarioNaoEncontradoException, SQLException, NomeInvalidoException, CodigoInvalidoException;
	public void TesteDisciplina() throws SQLException;
	public void InstalarDisciplina(boolean samples) throws SQLException;
	public void AdicionarDisciplina(Disciplina disciplina) throws SQLException, CodigoInvalidoException, NomeInvalidoException;
	public void RemoverDisciplina(Disciplina disciplina) throws SQLException, DisciplinaNaoEncontradaException, CodigoInvalidoException;
	public Disciplina BuscarDisciplina(int codigo) throws SQLException, DisciplinaNaoEncontradaException, CodigoInvalidoException;
	public ArrayList <Disciplina> ListaDisciplina() throws DisciplinaListaVaziaException, SQLException;
	public void EditarDisciplinas(Disciplina disciplina)throws DisciplinaNaoEncontradaException, SQLException, NomeInvalidoException, CodigoInvalidoException;

}
